package servlets;

import ejb.facades.forum.TopicFacadeLocal;
import entities.Admin;
import entities.forum.Topic;
import java.io.IOException;
import javax.ejb.EJB;
import javax.inject.Inject;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import sessions.IUserAccountSession;
import util.BreadCrumbItem;
import util.Script;
import util.Validator;

/**
 * Trabalho PD - 2014/2015
 *
 * @author a21210380 a21210392
 */
@WebServlet("/seetopic.html")
public class SeeTopicServlet extends ServletBase {

    private final static BreadCrumbItem[] BREAD_CRUMB_ITEMS = {
        new BreadCrumbItem("/Trabalho_PD/homepage.html", "Homepage", false),
        new BreadCrumbItem("/Trabalho_PD/forum.html", "Forum", true)};

    private final static Script[] EXTRA_SCRIPTS = {
        new Script("resources/js/webserviceforum.js", true),
        new Script("resources/js/customjs/seetopic.js", true)};

    @Inject
    private IUserAccountSession userAccountSession;

    @EJB
    private TopicFacadeLocal topicFacade;

    public SeeTopicServlet() {
        super("Topic", BREAD_CRUMB_ITEMS, null, EXTRA_SCRIPTS);
    }

    @Override
    protected void onGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        if (userAccountSession.isVisitor()) {
            callJsp(JSP_NOT_AUTHORIZED, req, resp);
            return;
        }
        String parameter = req.getParameter("id");
        if (parameter == null) {
            callJsp(JSP_INVALID_ARGUMENTS, req, resp);
            return;
        }

        Integer parseInt = Validator.parseInt(parameter);
        if (parseInt == null) {
            callJsp(JSP_INVALID_ARGUMENTS, req, resp);
            return;
        }

        Topic find = topicFacade.find(parseInt);
        if (find != null) {
            req.setAttribute("topic", find);
            req.setAttribute("posts", find.getPosts());
            
            Admin admin = userAccountSession.getAdmin();
            if (admin != null) {
                req.setAttribute("isAdmin", true);
            } else {
                req.setAttribute("isAdmin", false);
            }
            
            callJsp(JSP_SEE_TOPIC, req, resp);
        } else {
            callJsp(JSP_INVALID_ARGUMENTS, req, resp);
        }
    }

    @Override
    protected void onPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        if (userAccountSession.isVisitor()) {
            callJsp(JSP_NOT_AUTHORIZED, req, resp);
            return;
        }
        String parameter = req.getParameter("id");
        if (parameter == null) {
            callJsp(JSP_INVALID_ARGUMENTS, req, resp);
            return;
        }

        Integer parseInt = Validator.parseInt(parameter);
        if (parseInt == null) {
            callJsp(JSP_INVALID_ARGUMENTS, req, resp);
            return;
        }

        Topic find = topicFacade.find(parseInt);
        if (find != null) {
            req.setAttribute("topic", find);
            req.setAttribute("posts", find.getPosts());
            callJsp(JSP_SEE_TOPIC, req, resp);
        } else {
            callJsp(JSP_SEE_TOPIC, req, resp);
        }
    }
}
